"""
联系人相关的API路由
"""

from fastapi import APIRouter, Depends, HTTPException, status, Query
from sqlalchemy.orm import Session
from typing import Optional, List

from database import get_db
from schemas.contact import (
    ContactCreate, ContactUpdate, ContactResponse, ContactList,
    ContactQuery, ContactQueryResponse, ContactStatistics
)
from services.contact_service import ContactService
from utils.dependencies import get_current_active_user
from models.user import User
from models.contact import Contact

router = APIRouter()


@router.get("/test", summary="测试联系人数据")
async def test_contacts(
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """测试联系人数据"""
    try:
        # 查询所有联系人（不限制用户）
        all_contacts = db.query(Contact).all()
        print(f"数据库中总联系人数: {len(all_contacts)}")

        # 查询当前用户的联系人
        user_contacts = db.query(Contact).filter(Contact.user_id == current_user.id).all()
        print(f"当前用户({current_user.id})的联系人数: {len(user_contacts)}")

        result = []
        for contact in all_contacts:
            result.append({
                "id": contact.id,
                "name": contact.name,
                "email": contact.email,
                "phone": contact.phone,
                "user_id": contact.user_id,
            })
        return {
            "all_contacts": result,
            "total": len(result),
            "current_user_id": current_user.id,
            "user_contacts_count": len(user_contacts)
        }
    except Exception as e:
        return {"error": str(e), "current_user_id": current_user.id}

@router.get("/search", summary="搜索联系人")
async def search_contacts(
    q: str = Query(..., description="搜索关键词（姓名或邮箱）"),
    limit: int = Query(10, description="返回结果数量限制"),
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """
    搜索联系人 - 简化版本

    - **q**: 搜索关键词，可以是姓名或邮箱的一部分
    - **limit**: 返回结果数量限制，默认10个
    """
    try:
        print(f"API搜索联系人: q='{q}', user_id={current_user.id}, limit={limit}")
        contacts = ContactService.search_contacts(db, q, limit, current_user.id)
        print(f"API搜索结果: 找到{len(contacts)}个联系人")
        return {
            "contacts": contacts,
            "total": len(contacts),
            "query": q
        }
    except Exception as e:
        print(f"API搜索联系人异常: {str(e)}")
        import traceback
        traceback.print_exc()
        raise HTTPException(status_code=500, detail=f"搜索联系人失败: {str(e)}")


@router.post("/", response_model=ContactResponse, summary="创建联系人")
async def create_contact(
    contact_data: ContactCreate,
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """
    创建新的联系人
    
    - **name**: 联系人姓名
    - **email**: 邮箱地址
    - **phone**: 电话号码（可选）
    - **company**: 公司名称（可选）
    - **department**: 部门（可选）
    - **position**: 职位（可选）
    """
    contact = ContactService.create_contact(db, contact_data, current_user.id)
    return ContactResponse.from_orm(contact)


@router.get("/", response_model=ContactList, summary="获取联系人列表")
async def get_contacts(
    page: int = Query(1, ge=1, description="页码"),
    size: int = Query(10, ge=1, le=100, description="每页数量"),
    search: Optional[str] = Query(None, description="搜索关键词"),
    company: Optional[str] = Query(None, description="公司过滤"),
    department: Optional[str] = Query(None, description="部门过滤"),
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """
    获取联系人列表，支持分页、搜索和过滤
    
    - **page**: 页码（从1开始）
    - **size**: 每页数量（1-100）
    - **search**: 搜索关键词（可选）
    - **company**: 公司过滤（可选）
    - **department**: 部门过滤（可选）
    """
    return ContactService.get_contacts(db, current_user.id, page, size, search, company, department)


@router.get("/{contact_id}", response_model=ContactResponse, summary="获取联系人详情")
async def get_contact(
    contact_id: int,
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """
    获取指定联系人的详细信息
    
    - **contact_id**: 联系人ID
    """
    contact = ContactService.get_contact(db, contact_id, current_user.id)
    if not contact:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="联系人不存在"
        )
    return ContactResponse.from_orm(contact)


@router.put("/{contact_id}", response_model=ContactResponse, summary="更新联系人")
async def update_contact(
    contact_id: int,
    contact_data: ContactUpdate,
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """
    更新指定联系人的信息
    
    - **contact_id**: 联系人ID
    - **name**: 联系人姓名（可选）
    - **email**: 邮箱地址（可选）
    - **phone**: 电话号码（可选）
    - **company**: 公司名称（可选）
    - **department**: 部门（可选）
    - **position**: 职位（可选）
    """
    contact = ContactService.update_contact(db, contact_id, contact_data, current_user.id)
    if not contact:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="联系人不存在"
        )
    return ContactResponse.from_orm(contact)


@router.delete("/{contact_id}", summary="删除联系人")
async def delete_contact(
    contact_id: int,
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """
    删除指定的联系人
    
    - **contact_id**: 联系人ID
    """
    success = ContactService.delete_contact(db, contact_id, current_user.id)
    if not success:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="联系人不存在"
        )
    return {"message": "联系人删除成功"}


@router.post("/query", response_model=ContactQueryResponse, summary="从数据源查询联系人")
async def query_contacts(
    query_request: ContactQuery,
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """
    从指定数据源查询联系人信息
    
    - **data_source_id**: 数据源ID
    - **search**: 搜索关键词（可选）
    - **filters**: 自定义过滤条件（可选）
    - **page**: 页码
    - **size**: 每页数量
    """
    return ContactService.query_contacts_from_data_source(db, query_request, current_user.id)


@router.get("/search/autocomplete", response_model=List[ContactResponse], summary="联系人搜索自动完成")
async def search_contacts_autocomplete(
    q: str = Query(..., min_length=1, description="搜索关键词"),
    limit: int = Query(10, ge=1, le=50, description="返回数量限制"),
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """
    联系人搜索自动完成，用于输入框提示
    
    - **q**: 搜索关键词
    - **limit**: 返回数量限制（1-50）
    """
    return ContactService.search_contacts(db, current_user.id, q, limit)


@router.get("/statistics", response_model=ContactStatistics, summary="获取联系人统计")
async def get_contact_statistics(
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_active_user)
):
    """
    获取当前用户的联系人统计信息
    
    - 总联系人数
    - 按公司分布
    - 按部门分布
    - 最近7天新增数量
    """
    return ContactService.get_contact_statistics(db, current_user.id)
